package com.example.active_record.myMethod;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;

//MyBatisPlus扩展_SQL注入器
/*MyBatisPlus方法是有限的，
我们可以使用SQL注入器自定义全局方法，注入到全局中，
这样所有的Mapper类都能使用该方法，
接下来我们自定义一个deleteAll方法。
继承AbstractMethod*/
public class DeleteAll extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        //定义sql语句  from 后要加空隔键
        String sql = "delete from "+tableInfo.getTableName();
        //方法名
        String method = "deleteAll";
        //构建sqlSource对象,它负责将sql传递到数据库
        SqlSource sqlSource = this.languageDriver.createSqlSource(this.configuration,sql,modelClass);
        //构建删除方法
        return this.addDeleteMappedStatement(mapperClass,method,sqlSource);
    }
}
/*1创建注入方法类，继承AbstractMethod
* 2创建SQL自动注入器，继承AbstractSqlInjector
* @Component
public class MySqlInject extends AbstractSqlInjector {
  // 注入自定义方法集合
  @Override
  public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
    List<AbstractMethod> methods = new ArrayList<>();
    methods.add(new DeleteAll());
    return methods;
   }
}
* 3注销防止全表更新与删除插件   在配置类或启动类
*  interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
* 4，在Mapper接口中定义deleteAll方法
* public interface StudentMapper extends BaseMapper<Student> {
  void deleteAll();
}*/